// 类型16 - 泛型
// 定义要初次的规则，后续使用的都是它，初次的规则还是会发生变化的
{

// 1. 基础使用
// function fn<T>(x: T): T {
//     return x
// }
// // console.log(fn<number>(10));
// console.log(fn<string>('hello'));
// 声明函数
// let func: (val: string) => string;
// const func = <T>(val: T): T => val;
// console.log(func<string>('我害怕鬼'));
// console.log(func<boolean>(false));

// 2. 利用泛型实现小功能 泛型也有不同场景
function add<T>(val: T, count: number): T[] {
    let arr = [];
    for(var i = 0; i < count; i++) {
        arr.push(val)
    }
    return arr
}

// 关于泛型，一般以调用作为分析
// console.log(add<string>('hello', 3));

// 3, 声明泛型中的多个变量
function getData<T, C>(val: T, count: C): [T, C] {
    return [val, count]
}
const arr = getData<string, number>('猫头鹰', 100);
console.log(arr);



    
}
